package com.lzk.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 */
public class LoginHandlerInterceptor implements HandlerInterceptor {
    /**
     * 只需要下面这个(preHandle)，配置是否放行配置
     *      ## 返回值boolean
     *      -->true：表示放行
     *      -->false：表示不放行
     *
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {


        /**
         * 1.首先：登录成功之后，应该有用户的session
         *      -->因此如果存在session，说明用户登录了！
         *      -->如果不存在session，说明用户未登录！
         * 2.其次，这个session的值，在LoginController类中设置一个 session参数，
         * 校验用户名密码正确后，给这个session设置一个值，然后执行return。
         *
         */
        Object loginUser = request.getSession().getAttribute("loginUser");
        /**
         * 2. 然后：判断这个Session值"loginUser"是否存在，
         *      -->session存在：说明用户已登录了！
         *      -->session不存在(为空)：说明用户未登录！
         */
        if (loginUser == null) {
            //步骤一：session为空，提示"没有权限，请先登录！"。
            request.setAttribute("msg","没有权限，请先登录！");
            //步骤二：并将此信息返回首页"index.html"上显示，重定向回去
            request.getRequestDispatcher("/index.html").forward(request, response);
            //步骤三：未登录，session为空，返回false不放行
            return false;
        }else{
            //登录session不为空，放行-->返回true
            return true;
        }
        /**
         * 此时这个拦截器就写好了。
         *      -->写好后就要配置到bean里面(Spring 的IOC容器中)，进行注册！！
         *      -->到MyMvcConfig类中实现此拦截器"LoginHandlerInterceptor"的注册
         */
    }


    /**
     * 下面的拦截之前/之后(postHandle+afterCompletion)，不需要写
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
